#include<bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn=1e5+10;

int fac[20];

int get(string s){
	int ans=0;
	for(int i=0;i<17;i++){
		char c=s[i];
		int cnt=c-'a';
		for(int j=0;j<i;j++){
			if(s[j]<s[i]){
				cnt--;
			}
		}
		if(s[i]>'m'){ // 注意还有 m 不用考虑
			cnt--;
		}
		ans+=cnt*fac[17-(i+1)];
	}
	return ans;
}

void solve(){
	fac[0]=1;
	for(int i=1;i<=20;i++){
		fac[i]=fac[i-1]*i;
	}
	// 康托展开
	// 整体的思路就是求出 字符串的排名
	// 注意求排名时, 前面已经出现过的字符就不能再考虑了
	// 比如 bdca
	//      比 b 小的有 a 1*3!
	//      比 d 小的有 a b c , 但是 b 在前面已经出现过了 所以是 2*2!
	// ...
	//         
	int rank1=get("aejcldbhpiogfqnkr");
	int rank2=get("ncfjboqiealhkrpgd");
	// 一定要注意取最小值, 因为可以往上, 也可以往下
	// 所以题目给出的每一个条件都是有用的
	cout<<min(abs(rank2-rank1), fac[17]-abs(rank2-rank1))<<'\n';
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0),cout.tie(0);
	solve();
	return 0;
}
